<?php
// +----------------------------------------------------------------------
// | 验证器
// +----------------------------------------------------------------------
declare(strict_types=1);

namespace app\validate;

use think\Validate;

/**
 * 系统角色验证器
 *
 * Class SystemRolesValidate
 * @package app\validate
 */
class SystemRolesValidate extends Validate
{
    // 验证规则
    protected $rule = [
        'roleName'    => 'require|max:25',
        'code'        => 'require|max:25|unique:system_roles',
        'permissions' => 'checkArray:菜单',
        'sort'        => 'number',
    ];

    // 错误消息
    protected $message  =   [
        'roleName.require' => '角色名不能为空',
        'roleName.max'     => '角色名最多不能超过25个字符',
        'code.require'     => '角色标识不能为空',
        'code.max'         => '角色标识最多不能超过25个字符',
        'code.unique'      => '角色标识重复',
        'sort.number'      => '排序必须为数字',
    ];

    // 验证场景
    protected $scene = [
        // 常规修改
        'set'      => ['roleName', 'code', 'permissions', 'sort'],
        // 菜单修改
        'permissions' => ['permissions'],
    ];

    // 自定义验证规则
    protected function checkArray($value, $rule, $data = [])
    {
        if (!is_array($value)) {
            return $rule . '选择有误';
        }
        foreach ($value as $v) {
            if (!is_string($v)) {
                return $rule . '选择有误';
            }
        }
        return true;
    }

    // 修改规则
    public static function updateRules(int|string $id)
    {
        return [
            'code' => 'require|max:25|unique:system_roles,code,' . $id
        ];
    }
}
